package com.gzl.demo.service.impl;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gzl.demo.entity.Aaa;
import com.gzl.demo.mapper.test.AaaMapper;
import com.gzl.demo.service.AaaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;

import javax.annotation.Resource;

@Service
    /*开发中避免不了会对同一个类里面的方法调用，比如有一个类Test，它的一个方法A，A再调用本类的方法B（不论方法B是用public还是private修饰），但方法A没有声明注解事务，而B方法有。则外部调用方法A之后，方法B的事务是不会起作用的。这也是经常犯错误的一个地方。
    那为啥会出现这种情况？其实这还是由于使用Spring AOP代理造成的，因为只有当事务方法被当前类以外的代码调用时，才会由Spring生成的代理对象来管理。
    即A必须声明，B可以不声明
            ————————————————
    版权声明：本文为CSDN博主「跳崖寻死的鸟」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
    原文链接：https://blog.csdn.net/weixin_45676738/article/details/108828684*/
public class AaaServiceImpl extends ServiceImpl<AaaMapper, Aaa> implements AaaService {

        @Autowired
        private AaaMapper aaaMapper;

    @Resource
    private TransactionTemplate transactionTemplateOrder;



    @Override
    @Transactional(rollbackFor = Exception.class)
    public void gzl() throws Exception {

        Aaa aaa = new Aaa();
        aaa.setName("小啊啊");
    aaaMapper.insert(aaa);
        nihao();

        /*List<Aaa> authUserTags=null;
*//*
            authUserTags = aaaMapper.selectList(new QueryWrapper<Aaa>().lambda()
                    .eq(Aaa::getAge, 7979)
            );*//*


        if (authUserTags.size() > 0) {
            throw new Exception("hhh");
           // System.out.println("hahah");
        }*/

        /*List<Aaa> bbb = new ArrayList<>();*/
        /*for (int i = 0; i < 1000; i++) {
           Aaa aaa = new Aaa();
           aaa.setAge(i);
           aaa.setGrade(10L);
            aaaMapper.insert(aaa);
        }*/

        /*System.out.println(System.currentTimeMillis());
        List<Integer> ids = aaaMapper.selectByGrade(10);*/
        /*for (Integer id : ids) {
            Aaa aaa = aaaMapper.selectById(id);
            bbb.add(aaa);
        }*/
        System.out.println(System.currentTimeMillis());
        //List<Aaa> aaas = aaaMapper.selectList(new QueryWrapper<Aaa>().lambda().eq(Aaa::getGrade, 10));
       /* Aaa aaa = aaaMapper.selectById(null);
        System.out.println(aaa);
        System.out.println(System.currentTimeMillis());*/
        //System.out.println(aaas);
        //System.out.println(bbb);


    }

    @Override
    public Aaa demo1() {
        return aaaMapper.selectById(19);
    }

    //@Transactional(rollbackFor = Exception.class)
    public Boolean nihao(){

        Aaa aaa1 = aaaMapper.selectById(2);
        boolean update = this.update(new UpdateWrapper<Aaa>().lambda().eq(Aaa::getId, 1).set(Aaa::getAge, 3));

        aaa1.setAge(88);
        aaaMapper.updateById(aaa1);
        int a=1/0;
        return false;
    }




}
